package org.zjt.design.pattern;

import lombok.Builder;
import lombok.Data;
import lombok.ToString;

import static java.lang.System.out;

/**
 * @author <a href="juntao.zhang@qq.com">juntao.zhang</a>
 * @Description: 建造者模式，将多个属性装配到一个构建者中，通过构建者来产生一个实例
 * @Package org.zjt.design.pattern
 * @date 2018/5/8 15:18
 *
 * PS: 类似工厂模式，但是和构造顺序有关。

使用场景：
    ● 相同的方法，不同的执行顺序，产生不同的事件结果时，可以采用建造者模式。
    ● 多个部件或零件，都可以装配到一个对象中，但是产生的运行结果又不相同时，则可以使用该模式。
    ● 产品类非常复杂，或者产品类中的调用顺序不同产生了不同的效能，这个时候使用建造者模式非常合适。

建造者模式与工厂模式的不同：
    建造者模式最主要的功能是基本方法的调用顺序安排，这些基本方法已经实现了，顺序不同产生的对象也不同；
    工厂方法则重点是创建，创建零件是它的主要职责，组装顺序则不是它关心的。


 */
public class BuilderTest {

    public static void main(String[] args) {
        User zhangsan = User.builder().age(24).name("zhangsan").build();
        out.println(zhangsan);
    }

}

@Data
@Builder
@ToString
class User{
    private String name;
    private Integer age;
}
